﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace iNet.Media
{
	/// <summary>
	/// 實作 IMediaEncodeTaskFactory 介面的基底類別。
	/// </summary>
	public abstract class MediaEncodeTaskFactory : IMediaEncodeTaskFactory
	{
		#region 欄位
		IMediaFormat _EncodingFormat;
		string _Name;
		#endregion
		#region 建構子
		/// <summary>
		/// 初始化新的 MediaEncodeTaskFactory 執行個體。
		/// </summary>
		/// <param name="name">工廠名稱。</param>
		/// <param name="encodingFormat">媒體編碼格式。</param>
		/// <exception cref="ArgumentNullException">encodingFormat 為 Null (Visual Basic 為 Nothing)。</exception>
		protected MediaEncodeTaskFactory(string name, IMediaFormat encodingFormat)
		{
			if (encodingFormat == null)
				throw new ArgumentNullException("encodingFormat");
			_Name = name;
			_EncodingFormat = encodingFormat;
		}
		#endregion
		#region CreateEncodeTask
		/// <summary>
		/// 建立編碼工作。
		/// </summary>
		/// <param name="destination">提供編碼結果儲存的媒體儲存。</param>
		/// <returns>編碼工作。</returns>
		public abstract MediaEncodeTask CreateEncodeTask(MediaStorage destination);
		#endregion
		#region EncodingFormat
		/// <summary>
		/// 取得媒體的編碼格式。
		/// </summary>
		public IMediaFormat EncodingFormat
		{
			get
			{
				return _EncodingFormat;
			}
		}
		#endregion
		#region Name
		/// <summary>
		/// 取得工廠名稱。
		/// </summary>
		public virtual string Name
		{
			get
			{
				return _Name;
			}
		}
		#endregion
		#region SupportedMediaEncodeRequests
		/// <summary>
		/// 取得支援的編碼請求組合。
		/// </summary>
		public virtual MediaEncodeRequests SupportedMediaEncodeRequests
		{
			get
			{
				return MediaEncodeRequests.EncodeMetadata;
			}
		}
		#endregion
	}
}
